package controls

import (
	"github.com/labstack/echo/v4"
	"github.com/rs/xid"
	"sofuny/models"
	"sofuny/utils"
	"time"
)

// 添加
func AddLetter(ctx echo.Context) error {
	var v models.Letter
	var letter models.Letter
	// 绑定数据
	if err := ctx.Bind(&v); err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   utils.DataBindErrorMessage,
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 判断数据
	if v.Email == "" || v.Content == "" {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   utils.DataEmptyMessage,
			Data:  nil,
			Total: 0,
			Time:  utils.FormatTime(),
		})
	}
	// 赋值
	letter.CreateAt = time.Now().Local()
	letter.UpdateAt = letter.CreateAt
	letter.Status = true
	letter.Uuid = xid.New().String()
	letter.SendTime = v.SendTime
	letter.Email = v.Email
	letter.Content = v.Content

	// 创建
	if err := db.Create(&letter).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "创建信件失败",
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 成功
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "success",
		Data:  nil,
		Total: 0,
		Time:  utils.FormatTime(),
	})
}


// 后台
// all
func AdminFindAllLetter(ctx echo.Context) error {
	var letters []models.Letter
	// 查找
	if err := db.Order("create_at desc").Find(&letters).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "查找信件失败",
			Data:  err,
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 返回
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "success",
		Data:  letters,
		Total: len(letters),
		Time:  utils.FormatTime(),
	})
}

// get
func AdminFindLetter(ctx echo.Context) error {
	return nil
}

// add
func AdminAddLetter(ctx echo.Context) error {
	return nil
}

// change
func AdminChangeLetter(ctx echo.Context) error {
	return nil
}

// delete
func AdminDeleteLetter(ctx echo.Context) error {
	var v utils.Value
	var letter models.Letter
	// 数据绑定
	if err := ctx.Bind(&v); err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   utils.DataBindErrorMessage,
			Data:  err.Error(),
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 判断数据
	if v.Uuid == "" {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "uuid不允许为空",
			Data:  nil,
			Total: 0,
			Time:  utils.FormatTime(),
		})
	}
	// 查找句子
	if err := db.Where("uuid=?", v.Uuid).Find(&letter).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "获取信件失败",
			Data:  err.Error(),
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 执行删除
	if err := db.Unscoped().Delete(&letter).Error; err != nil {
		return ctx.JSON(200, utils.Response{
			Code:  201,
			Msg:   "删除信件失败",
			Data:  err.Error(),
			Total: 1,
			Time:  utils.FormatTime(),
		})
	}
	// 删除成功
	return ctx.JSON(200, utils.Response{
		Code:  200,
		Msg:   "删除成功!",
		Data:  nil,
		Total: 0,
		Time:  utils.FormatTime(),
	})
}

// 发送信件
func SendLetter()  bool {
	var letters []models.Letter
	// 查找
	if err := db.Find(&letters).Error; err != nil {
		return false
	}
	for _, item := range letters {
		// 判断　发送时间
		if item.SendTime.Local().Unix() == time.Now().Local().Unix() {
			if utils.SendMail(item.Email, app.Name+" | 一封信",
				"<h2>您好啊</h2>" +
				"<p>您在<strong>"+
				item.CreateAt.Format("2006-01-02 15:04:05")+
				"</strong>写下的信件内容:</p>" +
				"<p>"+item.Content+"</p>",
			){
				return true
			}else {
				return false
			}
		}
	}
	return false
}
